Add Waterrower USB connection Support (Issue #3059) - #3068
Conversation
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
Replaces auto-discovery with explicit device path search and connection for WaterRower USB devices. Updates Android and C++ bridge code to first locate the device, then connect using its path, improving reliability and error handling.
…-master # Conflicts: # src/android/build.gradle # src/devices/bluetooth.h # src/qzsettings.cpp # src/settings.qml
Android's UsbManager.getDeviceList() can return no devices at app startup if enumeration hasn't finished yet, so the single detection attempt at thread start silently failed forever (see debug log from issue #3059, comment 4858695955: single "device not found" line, no retries). Poll every 5s while not connected, broaden the vendor/product match, and also check the USB_DEVICE_ATTACHED intent as a fallback.
#3059) # Conflicts: # src/qzsettings.cpp # src/settings.qml
… jSerialComm jSerialComm can't open Android's raw USB device paths (/dev/bus/usb/X/Y) since CDC-ACM devices like the WaterRower S4/S5 USB monitor aren't exposed as kernel tty nodes on unrooted Android, causing "Unable to create a serial port object from the invalid port descriptor" errors reported in issue #3059. WaterRowerBridge now opens the device via usb-serial-for-android's CdcAcmSerialDriver (with permission handling) and hands the already-open UsbSerialPort to SerialChannel, which bridges it to the netty-based WaterRower transport via InputStream/OutputStream wrappers instead of jSerialComm.
lastStrokeRate was never assigned anywhere in WaterRowerBridge.java, only initialized to 0. Subscribe to AverageStrokeRateSubscription (already provided by waterrower-core) to actually populate it, so Cadence is reported to QZ instead of staying stuck at 0 while distance/watts/pace were updating fine.
waterrowerusb::update() never called update_metrics(), the base bluetoothdevice function that advances the session's elapsed time, moving time and other derived stats. Debug logs showed elapsed_s stuck at 0 for an entire ~10 minute session while distance/calories kept climbing in the background, which is almost certainly why the workout looked "dead" in the app even though data was technically being received. Also add the missing virtual bike/rower creation and connectedAndDiscovered() emission in update(), matching the pattern used by other non-BLE serial rowers (e.g. csaferower), since the WaterRower USB device previously never created a virtual device or triggered the accessory/heart-rate-belt wiring done on first connection.
…connection-Support-(Issue-#3059) # Conflicts: # src/qzsettings.cpp # src/settings-catalog.json # src/settings.qml
…connection-Support-(Issue-#3059)
Removed keepalive setting for lockscreen on iOS.
Add Waterrower USB connection Support (Issue #3059)